# Python Lambda函数

# Lambda函数是一种匿名函数，它可以把函数作为一个表达式来传递。
# 无需定义函数名，直接使用lambda关键字定义。
# 单行表达式，只能有一个表达式，不能包含其他语句，可以有多个参数，多个参数用逗号隔开。
# 自动返回表达式的结果，不需要使用return关键字。

# 语法：lambda arguments: expression
#   arguments：参数
#   expression：表达式


# 示例：
# 定义一个lambda函数，接受两个参数x和y，并返回它们的和
add = lambda x, y: x + y
print(add(2, 3))  # Output: 5

# 定义一个lambda函数，接受一个参数x，并返回其平方
square = lambda x: x ** 2
print(square(3))


# 也可以使用map()函数来使用lambda函数
# map()函数接收两个参数，第一个参数是函数，第二个参数是可迭代对象，并返回一个迭代器，其中包含了对每个元素应用函数后的结果。
numbers = [1, 2, 3, 4, 5]
result = list(map(lambda x: x * 2, numbers))
print(result)  # Output: [2, 4, 6, 8, 10]


# 也可以使用filter()函数来使用lambda函数
# filter()函数接收两个参数，第一个参数是函数，第二个参数是可迭代对象，并返回一个迭代器，其中包含了对每个元素应用函数后返回True的元素。
numbers = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x % 2 == 0, numbers))
print(result)  # Output: [2, 4]


# 作为函数参数传递
# 定义一个函数，接受一个lambda函数作为参数，并使用该函数对两个数进行操作
def operate(func, x, y):
    return func(x, y)
result = operate(lambda x, y: x + y,  3, 4)     # lambda x, y: x + y 传递给 operate()函数的func参数
print(result)  # Output: 7